package com.demo209_长度最小的子数组;

public class Solution_2024_02_26 {

    public static void main(String[] args) {
        int[] ints={2,3,1,2,4,3};
        int target=7;
        int len = minSubArrayLen(target, ints);
        System.out.println(len);
    }
    public static int minSubArrayLen(int target, int[] nums) {
        // 定义2个指针,左指针+右指针
        int left=0;
        int sum=0;
        // 1.求和
        for (int i = 0; i < nums.length; i++) {
            sum+=nums[i];
        }
        // 2.特判
        if (sum<target){
            return 0;
        }
        int total=0;
        int right=0;
        // 还有一个需要记录长度的变量
        int minLen=0;
        for ( right=0; right < nums.length; right++) {
            total+=nums[right];
            while (total-nums[left]>=target){
                total -= nums[left];
                left++;
            }
            // 这里记录的是成功的时候的长度,并非所有的长度
            if (total>=target){

                minLen = minLen==0?(right-left+1):Math.min(minLen,right-left+1);
            }
        }
        return minLen;
    }
}
